#include "led_drv.h"


typedef struct {
    rcu_periph_enum rcu;
    uint32_t gpio_periph;
    uint32_t pin;
} Led_GPIO_t;

static Led_GPIO_t Led_GPIO_arr[] = {
    {RCU_GPIOA, GPIOA, GPIO_PIN_8},
    {RCU_GPIOE, GPIOE, GPIO_PIN_6},
    {RCU_GPIOF, GPIOF, GPIO_PIN_6},
};

#define LED_GPIO_ARR_MAX  (sizeof(Led_GPIO_arr)/sizeof(Led_GPIO_arr[0]))

/**
 * @desc  :  LED驱动初始化
 * @date  : 2025-03-23
 * @author: AnRui
 * @note  :
 */
void LedDrvInit() {
    for (uint8_t i = 0; i < LED_GPIO_ARR_MAX; i++) {
        rcu_periph_clock_enable(Led_GPIO_arr[i].rcu);
        gpio_init(Led_GPIO_arr[i].gpio_periph, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, Led_GPIO_arr[i].pin);
        gpio_bit_reset(Led_GPIO_arr[i].gpio_periph, Led_GPIO_arr[i].pin);
    }

}

/**
 * @desc  : 点亮LED
 * @date  : 2025-03-23
 * @author: AnRui
 * @param : ledNo - {参数说明}: LED序号 0-2
 * @note  :
 */
void TurnOnLed(uint8_t ledNo) {
    if (ledNo >= LED_GPIO_ARR_MAX) return;
    gpio_bit_set(Led_GPIO_arr[ledNo].gpio_periph, Led_GPIO_arr[ledNo].pin);
}
/**
 * @desc  : 熄灭LED
 * @date  : 2025-03-23
 * @author: AnRui
 * @param : ledNo - {参数说明}: LED序号 0-2
 * @note  :
 */
void TurnOffLed(uint8_t ledNo) {
    if (ledNo >= LED_GPIO_ARR_MAX) return;
    gpio_bit_reset(Led_GPIO_arr[ledNo].gpio_periph, Led_GPIO_arr[ledNo].pin);
}

/**
 * @desc  : 翻转LED
 * @date  : 2025-03-23
 * @author: AnRui
 * @param : ledNo - {参数说明}: LED序号 0-2
 * @note  :
 */
void ToggleLed(uint8_t ledNo) {
    if (ledNo >= LED_GPIO_ARR_MAX) return;
    FlagStatus led_status= gpio_output_bit_get(Led_GPIO_arr[ledNo].gpio_periph, Led_GPIO_arr[ledNo].pin);
	FlagStatus toggle_led_status=(FlagStatus)(1-led_status);
	gpio_bit_write(Led_GPIO_arr[ledNo].gpio_periph, Led_GPIO_arr[ledNo].pin,toggle_led_status);
	
	
}

